package com.czk.doc;

import com.czk.util.ClientUtil;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;
import java.util.Map;

/**
 * 查询流程：
 * 1 客户端发送查询请求到协调节点
 * 2 协调节点计算数据所在的分片及全部的副本位置（为了实现副本的负载均衡）
 * 3 轮询所有副本
 * 4 将请求转发给具体的节点
 * 5 节点返回查询结果，将结果反馈给客户端
 * 分词器：
 * ik_max_word->细粒度的划分
 * ik_smart_word->大粒度划分
 * 词条：索引中最小存储和查询单元
 * 词典：字典，词条的集合
 * 倒排表：通过词条找打文档id
 *
 * @Author:ChenZhangKun
 * @Date: 2021/6/13 14:14
 */
public class SelectDoc {
    public static void main(String[] args) throws IOException {
        // 客户端
        RestHighLevelClient highLevelClient = ClientUtil.getHighLevelClient();
        // 查询
        GetRequest getRequest = new GetRequest();
        getRequest.index("user").id("1001");
        // 查询
        GetResponse response = highLevelClient.get(getRequest, RequestOptions.DEFAULT);
        //字符串
        String sourceAsString = response.getSourceAsString();
        // map {"age":26,"name":"陈彰坤","sex":"女"}
        Map<String, Object> source = response.getSource();
        System.out.println(source);
        // {sex=女, name=陈彰坤, age=26}
        System.out.println(sourceAsString);
        highLevelClient.close();
    }
}
